Проекты из нескольких форм и модулей

Работа с несколькими формами

Все проекты, которые мы до этого создавали, работали в одном ок­не. Окном этим служила форма, на которой мы и собирали проект. Однако вы вполне можете создать проект, который работает в двух или нескольких окнах.

Посмотрим, как создать в проекте еще одну форму и как наладить простейшее взаимодействие между двумя формами.

Создадим новый проект. При этом, как обычно, будет создана форма Form1. Чтобы добавить в проект еще одну форму, нужно вы­брать ProjectAdd FormNewForm->Open. Откроется форма Form2, а при ней свое окно кода. Таким образом, вы видите, что Visual Basic предоставляет удобную возможность программировать все про­исходящее в новой форме в окне кода, принадлежащем именно этой форме. Поместим для удобства рядом, обе формы со своими окнами кода. Разместим на формах элементы управления, а в окна кода запишем программный текст.

- Запустим проект. Мы видим, как и положено,  Forml,  а вот Form2 не появляется. Чтобы она появилась, нужно выполнить оператор Form2.Show. Щелкнем по Commandl - форма Form2 появилась.

 В каждом окне кода можно, как и обычно, писать операторы, приказывающие что-то сделать в форме-хозяине данного окна, а можно с таким же успехом писать операторы, приказывающие что-то сделать в любой другой форме проекта. Чтобы Visual Basic отличал первый случай от второго, во втором случае пе­ред именем свойства, принадлежащего другой форме, нужно писать имя этой формы с точкой, в первом же случае - не обязательно. Не

обязательно, но можно. Так, в левом окне вместо BackColor = vbBlue можно было бы написать Forml.BackColor = vbBlue или даже так:

 Me.BackColor = vbBlue. Слово Me является указанием на хозяина.

Чуть позже вы увидите, что из одной формы можно обращаться не только к свойствам, объектам и методам, принадлежащим другой форме, но и к переменным, процедурам и другим элементам. Правило везде одно:

Перед именем элемента, принадлежащего другой форме, нужно ставить имя формы-хозяина с точкой.

Модули кода

Пусть вы создали проект из двух форм: в одной игра в шахматы, и другой игра в тетрис. Каждая из форм при запуске проекта довольно долго загружается. Поэтому вы хотите, чтобы перед загрузкой форм компьютер спросил у вас, какую форму нужно загружать. Но мы при­выкли, что при запуске проекта на экране какая-нибудь форма появля­ется обязательно и в первую очередь. Мы можем изменить этот поря­док и сделать так, чтобы никакая форма не загружалась.

Добавим в проект так называемый модуль кода (его еще называют программным, или стандартным, или просто модулем): Project —>Add Module—»NewModule—»Ореn. Вы видите, что в проект добавилось окно кода модуля Module1. А ничего похожего на форму не появилось. Ни формы, ни кнопок, ни меток, никаких других элементов управле­ния в модуле кода нет и быть не может. Если форма без кода — тело без души, то модуль - душа без тела.

Проект можно настроить так, чтобы при запуске ни одна форма не загружалась, а выполнялась процедура со специальным названием Main, находящаяся в модуле кода. Запишем в окно кода нашего модуля 4 строки:                       
Sub Main()
  
y=InputBox(«Выбираем первый вариант или второй?» , «Введите 1 или 2»)
   
if y=1 Then Form1.show else Form2.show
End Sub

А вот как настраивать проект: ProjectProjectl PropertiesGeneral -> Startup Object -» здесь Visual Basic предложит вам выбор, с чего начинать запуск проекта - с загрузки формы Forml, с загрузки формы Form2 или с выполнения процедуры Main. Вы, конечно, выби­раете Sub MainOK.

Запустив этот проект, вы не видите никакой формы, вместо этого перед вами InputBox с приглашением ввести 1 или 2. Введя 1, вы тем са­мым загружаете Forml, а введя 2 - Form2.

Термином модуль часто называют не только модуль кода, но и форму, и неизвестный пока нам модуль класса, и некоторые другие сохраняемые в собственных файлах главные компоненты проекта

Структура проекта. Окно Project Explorer

Работа с несколькими модулями

Каждый из модулей сохраняется на диске в своем файле. Щелкая в окне Project Explorer по нужному мо­дулю, а затем по одной из двух кнопок слева на панели окна; мы мо­жем удобно переключаться между различными окнами модулей.

Вы можете удалять модулями из проекта, щелкая правой клавишей мыши в окне- Project Explorer по ненужному модулю, а затем в открыв­шемся контекстном меню выбирая Remove. Так, если у вас простой вы­числительный проект, вы вообще можете удалить все формы, обой­дясь одним только модулем кода. Для ввода информации в компьютер вам достаточно будет использовать InputBox, для вывода - MsgBox, а для вычислений - процедуры в модуле кода.

Работа с несколькими проектами

При работе с Visual Basic довольно часто встречаются ситуации, когда необходимо открыть в среде Visual Basic одновременно два или несколько проектов. Причина может быть разная, самая тривиальная -необходимость удобного копирования отдельных частей программно­го текста из одного проекта в другой. Если вы добавили новый проект, то при сохранении он попытается сохранить свои файлы в ту же папку, где сохранен первый проект. Не стоит этого разрешать, а если уж разрешили, то проследите, чтобы имена файлов в обоих проектах различались, иначе файлы нового проекта затрут одноименные файлы первого.

Какой из двух проектов будет запускаться, когда вы привычно на­жмете кнопку Start на панели инструментов? Вы сами можете это за­дать, щелкнув правой клавишей мыши в окне Project Explorer по назва­нию нужного проекта, а затем в открывшемся контекстном меню вы­брав Set as Start Up.

 Для переменных в Visual Basic определены 3 зоны видимости:

 

Зона видимости

Видны

Объявляются оператором

1. Локальные пере­менные процедуры

Только внутри процедуры, в ко­торой они объявлены

Dim, внутри процедуры'

2. Локальные пере­менные модуля

Везде внутри модуля, в котором они объявлены. Из других моду­лей не видны

Dim или Private, в верхней части модуля, снаружи процедур

3. Глобальные (обще­доступные) перемен­ные проекта

Отовсюду изо всех модулей про­екта

Public, в верхней части мо­дуля, снаружи процедур

Как видите, первая зона - самая узкая, третья - самая широкая.


Аналогичным образом можно удалить проект из среды (не с диска), выбрав в этом же контекстном меню Remove Project.

Зоны видимости

Зоны видимости переменных

А теперь поговорим о важном средстве обеспечения удобства и на­дежности программирования на Visual Basic - о механизме задания зон видимости переменных, процедур и других элементов Visual Basic. В 17.2 мы уже сталкивались с этим механизмом, когда пере­менные, объявленные внутри процедуры, являлись локальными в про­цедуре, то есть невидимыми снаружи процедуры. Поэтому их нельзя было использовать в других процедурах модуля. Если вы подзабыли этот параграф, то сейчас перечтите.

Пример окна кода:

Public a As I nteger      Гповальная переменная Private b As Integer      Шкальная переменная модуля

Private Sub Command1_Click()

Private с As Integer   'Локальная переменная процедуры

End Sub

С первыми двумя зонами видимости вы знакомы. С третьей зоной сейчас познакомимся. Вот как можно из одного модуля обращаться к глобальным переменным, объявленным в другом модуле. Пусть в нашем проекте созданы 2 формы: Form1 и Form2. Вот окно кода формы 1: Public a As Integer

Private Sub Command1_Click()

Form2.Show

a = 1

End Sub

Оператор Public объявляет переменную а как глобальную (или об­щедоступную), видимую изо всех модулей. Щелкнув по кнопке фор­мы 1, вы присваиваете переменной а значение 1. Вот окно кода формы 2:

Private Sub Command1_Click()

Debug.Print

Forml.а

End Sub

Щелкнув по кнопке формы 2, вы печатаете 1 - правильное значение переменной а.

 

Откройте сначала обычным образом один проект. Чтобы открыть еще и другой, вам нельзя использовать, как вы привыкли, File—> Open Project (открыть проект), так как при этом уже открытый проект за­кроется. Нужно использовать FileAdd Project (добавить проект). Откроется диалоговое окно, глядя в которое вы должны решить, хоти­те ли вы добавить в среду разработки новый проект (закладка New) или же один из уже существующих (закладка Existing). Затем выбираете нужный проект и ->Ореn. Теперь на экране вы можете видеть одно­временно все формы и окна кода обоих проектов.

 

 

Hosted by uCoz